﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Entidad;
namespace Acceso_Datos.Clases_DAO
{
    public class clsMedicoDAO
    {
        private BDClinicaEntities ContextoDeObjs = new BDClinicaEntities();
        public bool Insertar(GEN_MEDICO Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("GEN_MEDICO", Obj);               
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public bool Insertar_Medico_Especialidad(GEN_MEDICO Obj1,GEN_ESPECIALIDAD Obj2,  Int32 idEspecialidad)
        {
            try
            {
                Obj2 = ContextoDeObjs.GEN_ESPECIALIDAD.First(x => x.ESP_ID_ESPECIALIDAD == idEspecialidad);
                Obj1.GEN_ESPECIALIDAD.Add(Obj2);

                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public bool Modificar(GEN_MEDICO obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("GEN_MEDICO", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;

            }
            return true;
        }
        public bool Eliminar(GEN_MEDICO obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("GEN_MEDICO", obj);
                ContextoDeObjs.DeleteObject(obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
        public List<GEN_MEDICO> listar()
        {
            List<GEN_MEDICO> lista = new List<GEN_MEDICO>();
            var q = from c in ContextoDeObjs.GEN_MEDICO
                    select c;
            lista = q.ToList();
            return lista;
        }
        public List<V_Medico> listar_Medico()
        {
            List<V_Medico> lista = new List<V_Medico>();
            var q = from c in ContextoDeObjs.V_Medico
                    select c;
            lista = q.ToList();
            return lista;
        }
        public List<V_Medico_Especialidad> listar_Medico_Filtro(int?  ID_Especialidad)
        {
            List<V_Medico_Especialidad> lista = new List<V_Medico_Especialidad>();
            var q = from c in ContextoDeObjs.V_Medico_Especialidad
                    where c.ESP_ID_ESPECIALIDAD==ID_Especialidad
                    select c;
            lista = q.ToList();
            return lista;
        }

        public List<V_Medico_Especialidad> listar_Medico_Especialidad(Int32 ID_Medico)
        {
            List<V_Medico_Especialidad> lista = new List<V_Medico_Especialidad>();
            var q = from c in ContextoDeObjs.V_Medico_Especialidad
                    where c.MED_ID_MEDICO == ID_Medico
                    select c;
            lista = q.ToList();
            return lista;
        }
        public List<V_Medico_Especialidad> listar_Medico_Especialidad_Sin_Filtro()
        {
            //List<V_Medico_Especialidad> lista = new List<V_Medico_Especialidad>();
            //var q = from c in ContextoDeObjs.V_Medico_Especialidad
            //        select c;
            //lista = q.ToList();

            var proc = ContextoDeObjs.ExecuteStoreQuery<V_Medico_Especialidad>("EXEC Usp_Medico_Especialidad").AsQueryable().ToList();

            return proc;
           
        }

        public int UltimoNumero()
        {
            var max = 0;
            try
            {
                max = ContextoDeObjs.GEN_MEDICO.Select(x => x.MED_ID_MEDICO).Max();
                return max;
            }
            catch (Exception)
            {
                return max;
            }
        }
    }
}
